﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Ext.Net;
using ENT.GP.Core.Core;
using ENT.GP.Core;
using entgp.Code;


namespace entgp.Administracion
{
    public partial class Catalogos : PaginasUsuario
    {
        private int IdEmpSession
        {
            get
            {
                int idEmpresa;
                string sNameSession = GetNameSession();
                int.TryParse(Session[sNameSession].ToString(), out idEmpresa);
                return (idEmpresa);

            }
            set
            {
                string sNameSession = GetNameSession();
                Session[sNameSession] = value;
            }

        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                EmpresaLookup.InvalidateCache();
                //RG para determinar si es rol admin o especifico =1 rol admin 0= rol especifico
                int idLink = 0;
                int.TryParse(Page.Request.QueryString.Get("RG"), out idLink);
                int iTipo = GetTypeQueryString();
                
                sCodigos.DataSource = CodigoCatalogos.GetCodigoCatalogos(iTipo);
                sCodigos.DataBind();

                sEmpresas.DataSource = EmpresaLookup.GetNameValueList(this.IdEmpSession);
                sEmpresas.DataBind();

                //
                if (idLink == 1)
                {
                    if (iTipo == 1)
                    {
                       
                        this.wSelectEmpresa.Show();
                    }
                    else
                    {
                        this.IdEmpSession = 0;
                        NewChooseEmp(false);

                    }
                    
                }
                else
                {
                    this.IdEmpSession =this.IdEmp;
                    NewChooseEmp(false);
                }

            }
        }

        /// <summary>
        /// Obtener el nombre de la session conactenado con query-string TYPE
        /// </summary>
        /// <returns>string</returns>
        private string GetNameSession()
        {
            int iTipo = GetTypeQueryString();
            string sNameSession = "CodigoEmpSelect0_" + iTipo.ToString();
            return sNameSession;
        }
        /// <summary>
        /// Obtener Type Page.Request.QueryString TYPE y determinar si es catalogo general o especifico
        /// </summary>
        /// <returns></returns>
        private int GetTypeQueryString()
        {
            int iTipo    = 0;
            string sTipo = (Page.Request.QueryString.Get("TYPE") != null) ? Page.Request.QueryString.Get("TYPE") : "1";
            int.TryParse(sTipo, out iTipo);
            return iTipo;
        }
        /// <summary>
        /// Ocultar/presentar box de seleccion de empresa
        /// </summary>
        /// <param name="bValue"></param>
        private void NewChooseEmp(Boolean bValue)
        {
            this.lblNewSeeK.Visible = bValue;
            this.cbxChoseeEmp.Visible = bValue;
            this.btnNuevaBusqueda.Visible = bValue;
        }
        protected void btnNewSeeK_Click(object sender, DirectEventArgs e)
        {
            try
            {
                int idEmpTmp = 0;
                int.TryParse(cbxChoseeEmp.SelectedItem.Value, out idEmpTmp);
                this.IdEmpSession = idEmpTmp;

                //GridPanelUsuarios
                gdpCatalogos.Title = "Listado de Usuarios de " + cbxChoseeEmp.SelectedItem.Text;
               
                sListaCatalogos.RemoveAll();

                cbxCodigo.SetValue("");
                txaDescripcion.SetValue("");
            }
            catch { }
        }

        protected void Editar_Codigo(object sender, DirectEventArgs e)
        {
            try
            {
                int idCatalogo;
                int.TryParse(e.ExtraParams["Id"], out idCatalogo);
                hidCodigoCatalodo.Text = e.ExtraParams["Id"];
                string opcion = e.ExtraParams["Comando"];
                switch (opcion)
                {
                    case "Eliminar":
                        X.Msg.Confirm("Aviso","Esta seguro de eliminar el item",
                            new MessageBoxButtonsConfig
                            { 
                                Yes = new MessageBoxButtonConfig
                                {
                                    Handler = "CatalogoAjax.EliminarCatalogo();",
                                    Text = "Si"
                                },
                                No = new MessageBoxButtonConfig
                                {
                                    Text = "No"
                                }
                            }).Show();
                        
                        break;
                    case "Editar":

                        var catalogo = Catalogo.Get(idCatalogo);
                        cbxCodigoCatalogo.SetValue(catalogo.Codigo);
                        txtNombre.Text=catalogo.Nombre;
                        txtDescripcion.Text = catalogo.Descripcion;
                        int idCatalogoPapa;
                        int.TryParse(catalogo.IdCatalogoPadre.ToString(), out idCatalogoPapa);
                        if (idCatalogoPapa > 0)
                        {
                            var catalogoPadre = Catalogo.Get(idCatalogoPapa);
                            cbxCodigoCatalogoPadre.Enabled = true;
                            cbxCodigoCatalogoPadre.SetValue(catalogoPadre.Codigo);
                            sItemCatalogoPadre.DataSource = ListaCatalogos.GetListaCatalogos(catalogoPadre.Codigo,IdEmpSession);
                            sItemCatalogoPadre.DataBind();
                            cbxItemCatalogoPadre.SetValue(catalogoPadre.Id);
                            radNo.SetValue(false);
                            radSi.SetValue(true);
                        }
                        else
                        {
                            radNo.SetValue(true);
                            radSi.SetValue(false);
                        }
                        nfNumHabUrbano.Number = Convert.ToDouble( catalogo.HabitantesUrbano);
                        nfNumHabRural.Number = Convert.ToDouble(catalogo.HabitantesRural);
                        wItemCatalogo.Show();
                        break;
                    default:
                        nfNumHabUrbano.Number = 0;
                        nfNumHabRural.Number = 0;
                        break;
                }
                
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex.ToString());
            }
        }
        [DirectMethod]
        public void EliminarCatalogo()
        {
            try
            {
                int idCatalogo;
                int.TryParse(hidCodigoCatalodo.Text, out idCatalogo);
                var catalogo = Catalogo.Get(idCatalogo);
                catalogo.Delete();
                catalogo.Save();
                UtilP.MostrarNotificacion("El elemento se elimino correctamente", "Aviso", MessageBox.Icon.INFO);
                //gdpCatalogos.DeleteSelected();
                DataBindSearch();
            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
                UtilP.MostrarNotificacion("El elemento no se elimino", "Aviso", MessageBox.Icon.ERROR);
            }
            
        }
        public void btnGuardar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var catalogo = Catalogo.New();
                int idCatalogoPadre,id;
                int.TryParse(e.ExtraParams["hidCodigoCatalodo_prm"].ToString(), out id);//hidCodigoCatalodo.Text
               
                if (id>0)
                {
                    catalogo = Catalogo.Get(id);
                }

                catalogo.Codigo = e.ExtraParams["cbxCodigoCatalogo_prm"].ToString();//cbxCodigoCatalogo.SelectedItem.Value;
                catalogo.Nombre = e.ExtraParams["txtNombre_prm"].ToString();//txtNombre.Text;
                catalogo.Descripcion = e.ExtraParams["txtDescripcion_prm"].ToString();//txtDescripcion.Text;
                catalogo.HabitantesUrbano = Convert.ToInt32(e.ExtraParams["nfNumHabUrbano_prm"].ToString());//Convert.ToInt32(nfNumHabUrbano.Number);
                catalogo.HabitantesRural = Convert.ToInt32(e.ExtraParams["nfNumHabUrbano_prm"].ToString());//Convert.ToInt32(nfNumHabRural.Number);
                catalogo.IDEmpresa        = this.IdEmpSession;
              
                if (radSi.Checked)
                {
                    //int.TryParse(cbxItemCatalogoPadre.SelectedItem.Value,out idCatalogoPadre);
                    int.TryParse(e.ExtraParams["cbxItemCatalogoPadre_prm"].ToString(), out idCatalogoPadre);
                    catalogo.IdCatalogoPadre = idCatalogoPadre;
                }
                catalogo = catalogo.Save();
                e.Success = true;
                //
                DataBindSearch();
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex.ToString());
            }
        }
        protected void ListarItems_Click(object sender, DirectEventArgs e)
        {
            DataBindSearch();
        }

        private void DataBindSearch()
        {

            sListaCatalogos.DataSource = ListaCatalogos.GetListaCatalogos(cbxCodigo.SelectedItem.Text, this.IdEmpSession);
            sListaCatalogos.DataBind();

        }
        protected void cbxCodigoCatalogoPadre_Select(object sender, DirectEventArgs e)
        {
            try
            {
                sItemCatalogoPadre.DataSource = ListaCatalogos.GetListaCatalogos(cbxCodigoCatalogoPadre.SelectedItem.Value,this.IdEmpSession);
                sItemCatalogoPadre.DataBind();
            }
            catch (Exception ex)
            {
                Util.RegistarLog(ex.ToString());
            }
        }

        protected void btnSelecionar_Click(object sender, DirectEventArgs e)
        {
            try
            {

                this.IdEmpSession = Convert.ToInt32(cbxEmpresas.SelectedItem.Value);
                gdpCatalogos.Title = "Listado de Catalogos de " + cbxEmpresas.SelectedItem.Text;
                this.wSelectEmpresa.Hide();
            }
            catch (Exception ex)
            {
                e.Success = false;
                Util.RegistarLog(ex.ToString());
            }
        }
    }
}
